// Classe utilizada nos forms JSF

package br.visao;

import java.util.ArrayList;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.model.SelectItem;

import br.modelo.Cidade;
import br.modelo.Pessoa;
import br.modelo.Secao;
import br.modelo.Zona;
import br.rn.CidadeRN;
import br.rn.PessoaRN;
import br.rn.SecaoRN;
import br.rn.ZonaRN;
import br.util.Mensagem;


@ManagedBean
@RequestScoped
public class PessoaBean {

	private Pessoa pessoaSelecionada;
	private PessoaRN pessoaRn;
	private ZonaRN zonaRN;
	private CidadeRN cidadeRN;
	private SecaoRN secaoRN;
	private List<Pessoa> listaPessoa;
	private List<SelectItem> cidadeSelect;
	private List<SelectItem> zonaSelect;
	private List<SelectItem> secaoSelect;
	private List<Cidade> listaCidades;
	private List<Zona> listaZonas;
	private List<Secao> listaSecoes;
	private Mensagem mensagem;
	public Cidade cidAtual;
	
	@PostConstruct
	private void inicializar(){
		pessoaSelecionada = new Pessoa();
		listaPessoa = null;
		listaCidades = null;
		listaSecoes = null;
		listaZonas = null;
		pessoaRn = new PessoaRN();
		mensagem = new Mensagem();
		zonaRN = new ZonaRN();
		cidadeRN = new CidadeRN();
		secaoRN =  new SecaoRN();
		cidAtual =  new Cidade();
	}

	
	public void salvar(){
		
		pessoaSelecionada.setCidade(pessoaSelecionada.getCidade());
		pessoaSelecionada.setZona(pessoaSelecionada.getZona());
		pessoaSelecionada.setSecao(pessoaSelecionada.getSecao());
		pessoaRn.salvar(pessoaSelecionada);
		mensagem.msgDadosInseridos();
	}
	
	
	// GET E SET
	public Pessoa getPessoaSelecionada() {
		return pessoaSelecionada;
	}

	public void setPessoaSelecionada(Pessoa pessoaSelecionada) {
		this.pessoaSelecionada = pessoaSelecionada;
	}

	public List<Pessoa> getListaPessoa() {
		listaPessoa = pessoaRn.listar();
		return listaPessoa;
	}
	
	public List<SelectItem> getCidadeSelect() {
		if (this.cidadeSelect == null){
			cidadeSelect = new ArrayList<SelectItem>();
			listaCidades = cidadeRN.listar();
			if(listaCidades != null && !listaCidades.isEmpty()){
				SelectItem item;
					for (Cidade cidadesLista : listaCidades) {
					item = new SelectItem(cidadesLista, cidadesLista.getNome());
					cidadeSelect.add(item);
				}
			}
		}
		return cidadeSelect;
	}


	
	public List<SelectItem> getZonaSelect() {
		if (this.zonaSelect == null){
			zonaSelect = new ArrayList<SelectItem>();
			
			if( pessoaSelecionada.getCidade() == null || pessoaSelecionada.getCidade().getNome() == null ||  pessoaSelecionada.getCidade().getNome() == ""){
				listaZonas = zonaRN.listar();
			}else{
				listaZonas = zonaRN.listarPorCidade(pessoaSelecionada.getCidade());
				cidAtual = pessoaSelecionada.getCidade();
			}
			if(listaZonas != null && !listaZonas.isEmpty()){
				SelectItem item;
				for (Zona zonasLista : listaZonas){
					item = new SelectItem(zonasLista, Integer.toString(zonasLista.getZona()));
					zonaSelect.add(item);
				}
			}
		}
		return zonaSelect;
	}

	public List<SelectItem> getSecaoSelect() {
		if (this.secaoSelect ==null){
			secaoSelect = new ArrayList<SelectItem>();
			if (pessoaSelecionada.getZona() == null || pessoaSelecionada.getZona().getZona() == null){
				listaSecoes = secaoRN.listar();
			}else{
				listaSecoes = secaoRN.listarPorCidadeZona(pessoaSelecionada.getZona().getCidade(), pessoaSelecionada.getZona());
			}if(listaSecoes != null && !listaSecoes.isEmpty()){
				SelectItem item;
				for (Secao secoesLista : listaSecoes){
					item = new SelectItem(secoesLista, Integer.toString(secoesLista.getSecao()));
					secaoSelect.add(item);
				}
			}
			
		}
		
		return secaoSelect;
	}


	public Cidade getCidAtual() {
		return cidAtual;
	}


	public void setCidAtual(Cidade cidAtual) {
		this.cidAtual = cidAtual;
	}

	
	
}
